package day7;

import org.junit.Test;

public class Demo {

	@Test
	public void test1() {
		// Add add = new Add();
		// add.setNum1(3);
		// add.setNum2(5);
		
		Add add = new Add(3, 5);
		// 如果子类没有重写父类的getResult()方法，那么调用的就是从父类继承的getResult()方法
		// 如果子类重写（覆盖）了父类的方法，那么调用的就是调用子类重写的方法
		int result = add.getResult();
		System.out.println(result);
	}
	
	@Test
	public void test2() {
		// 声明成父类类型，new子类对象，可以赋给声明的父类变量
		// 你继承什么你就是什么，学生就是人，加法是计算
		Cal cal = new Add(3, 2);
		// Type mismatch: cannot convert from Cal to Add
		// 计算机不是加法
		// Add add = new Cal(3, 2);
		
		// 如果子类没有重写父类的getResult()方法，那么调用的就是从父类继承的getResult()方法
		// 如果子类重写（覆盖）了父类的方法，那么调用的就是调用子类重写的方法
		int result1 = cal.getResult();// 5
		System.out.println(result1);
		
		// 多态：多种形态
		// 声明成父类类型，可以指向不同子类对象
		cal = new Sub(3, 2);
		int result2 = cal.getResult();
		System.out.println(result2);// 1
		
		// 如果一个类是抽象类，那么这个类是不能实例化
		// Cannot instantiate the type Cal
		// Cal c = new Cal(); 
	}
	
	
	@Test
	public void test55() {
		Add add = new Add(3, 5);
		show(add);
		Sub sub = new Sub(3, 5);
		show(sub);
		Div div = new Div(6, 3);
		show(div);
	}
	
	private void show(Cal cal) {
		System.out.println(cal.getResult());
	}

//	private void show(Div div) {
//		System.out.println(div.getResult());
//	}
//
//	private void show(Add add) {
//		System.out.println(add.getResult());;
//	}
//	
//	private void show(Sub sub) {
//		System.out.println(sub.getResult());;
//	}
	
}
